package com.lion.common.modules.uaa.service.def;


import com.lion.common.modules.uaa.web.models.results.LoginResult;

/**
 * @author Chris Chan
 * Create On 2025/7/29 下午7:53
 * Use for: 账号
 * Explain:
 * 无需授权
 */
public interface AuthAccountService {
    /**
     * 获取图形验证码
     *
     * @return 图形验证码
     */
    String getGraphVerifyCode();

    /**
     * 发送验证码
     *
     * @param mobile 手机号
     * @return 是否发送成功
     */
    boolean sendMobileVerifyCode(String mobile);

    /**
     * 发送验证码邮件
     *
     * @param email 邮箱
     * @return 是否发送成功
     */
    boolean sendEmailVerifyCode(String email);

    /**
     * 用户名密码注册
     *
     * @param username         用户名
     * @param password         密码
     * @param confirmPassword  确认密码
     * @param verificationCode 验证码
     * @return 是否注册成功
     */
    boolean registerByUsernamePassword(String username, String password, String confirmPassword, String verificationCode);

    /**
     * 手机号验证码注册
     *
     * @param cellphone  手机号
     * @param verifyCode 验证码
     * @return 是否注册成功
     */
    boolean registerByMobileVerifyCode(String cellphone, String verifyCode);

    /**
     * 邮箱验证码注册
     *
     * @param email      邮箱
     * @param verifyCode 验证码
     * @return 是否注册成功
     */
    boolean registerByEmailVerifyCode(String email, String verifyCode);

    /**
     * 手机号验证码登录
     *
     * @param mobile  手机号
     * @param verifyCode 验证码
     * @return 登录结果
     */
    LoginResult loginByMobileVerifyCode(String mobile, String verifyCode);

    /**
     * 邮箱验证码登录
     *
     * @param email      邮箱
     * @param verifyCode 验证码
     * @return 登录结果
     */
    LoginResult loginByEmailVerifyCode(String email, String verifyCode);

    /**
     * 用户名登录
     *
     * @param username 用户名
     * @param password 密码
     * @return
     */
    LoginResult loginByUsernameAndPassword(String username, String password);

    /**
     * 手机号重置密码
     *
     * @param mobile  手机号
     * @param verifyCode 验证码
     * @return 是否重置成功
     */
    boolean resetPasswordByMobile(String mobile, String verifyCode);

    /**
     * 邮箱重置密码
     *
     * @param email      邮箱
     * @param verifyCode 验证码
     * @return 是否重置成功
     */
    boolean resetPasswordByEmail(String email, String verifyCode);


    /**
     * 刷新登录结果
     *
     * @param refreshToken 刷新令牌
     * @return 登录结果
     */
    LoginResult refreshLoginResult(String refreshToken);


    /**
     * 激活账号
     *
     * @param activateCode 激活码
     * @return 是否激活成功
     */
    boolean activateAccount(String activateCode);

}
